import { defineStore } from "pinia";
import { getDictData } from "../api/common";

export const useDataStore = defineStore("dataStore", {
  state: () => ({
    allData: [],
    routeInfo: [], // 路由信息
    roleId: {}, // 用户角色 ID
    roleMenuList: [], // 角色对应的菜单权限按钮
    isAdmin: false, // 是否是管理员

    // 用户性别
    sys_user_sex: [],
    // 菜单状态
    sys_show_hide: [],
    // 系统开关
    sys_normal_disable: [],
    // 任务状态
    sys_job_status: [],
    // 任务分组
    sys_job_group: [],
    // 系统是否
    sys_yes_no: [],
    // 通知类型
    sys_notice_type: [],
    // 通知状态
    sys_notice_status: [],
    // 操作类型
    sys_oper_type: [],
    // 系统状态
    sys_common_status: [],
    // 供应商审核状态
    supplier_audit: [],
    // 评审员类型
    judge_user_type: [],
    // 价格公式
    price_equation: [],
    // 分数类型
    score_type: [],
    // 项目参数使用对象
    project_use_object: [],
    // 供应商经营资质证书类型
    supplier_cert: [],
    // 行业类别
    supplier_industry: [],
    // 单位类型
    unit_type: [],
    // 单位性质
    unit_property: [],
    // 模板值使用对象
    template_use_object: [],
    //项目状态
    project_status: [],
    //项目类型
    project_type: [],
    //供应商状态
    apply_supplier_status: [],
  }),

  actions: {
    // 通用设置函数，用于更新状态
    setState(key, data) {
      this[key] = data;
    },

    /**
     * 通用函数，用于根据备注筛选并映射字典数据
     * @param {Array} data - 原始字典数据数组
     * @param {String} dictType - 需要筛选的备注
     * @returns {Array} - 处理后的字典数据
     */
    processDictData(data, dictType) {
      return data
        .filter((item) => item.dictType === dictType)
        .map((item) => ({
          dictLabel: item.dictLabel,
          dictValue: item.dictValue,
        }));
    },

    /**
     * 获取并处理所有字典数据
     */
    async fetchData() {
      try {
        const response = await getDictData();
        const data = response.data;

        // console.log(data, "字典数据");

        // 动态处理各类字典数据
        const dictTypes = [
          "sys_user_sex",
          "sys_show_hide",
          "sys_normal_disable",
          "sys_job_status",
          "sys_job_group",
          "sys_yes_no",
          "sys_notice_type",
          "sys_notice_status",
          "sys_oper_type",
          "sys_common_status",
          "supplier_audit",
          "judge_user_type",
          "price_equation",
          "score_type",
          "project_use_object",
          "supplier_cert",
          "supplier_industry",
          "unit_type",
          "unit_property",
          "template_use_object",
          "project_status",
          "project_type",
          "apply_supplier_status",
        ];

        dictTypes.forEach((type) => {
          const dictData = this.processDictData(data, type);
          this.setState(type, dictData);
        });

        // 保存所有数据
        this.setState("allData", data);
      } catch (error) {
        console.error("获取字典数据失败:", error);
      }
    },
  },
});
